package ru.niir.goodfil.ui;

import ru.niir.goodfil.db.User;
import ru.niir.goodfil.ui.tasks.CountDownTask;

import javax.faces.model.SelectItem;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static ru.niir.goodfil.utils.Utils._assert;

/**
 * @author Vit
 */
public class BlockExchangeBean extends PageBean {

    private int intervalId;

    private long managerId;

    private TimeIntervals timeIntervals;

    public BlockExchangeBean() {
        timeIntervals = new TimeIntervals();
        managerId = 0;
    }

    /**
     * Возвращает список установленных менеджеров.
     *
     * @return список менеджеров
     */
    public List<SelectItem> getAllManagers() {
        List<SelectItem> result = new ArrayList<SelectItem>() {{
            add(new SelectItem(-1, "всех"));
        }};
        for (User manager : gf().getManagers()) {
            _assert(manager != null);
            if (manager == null) continue;
            String prefix = "всех, кроме ";
            result.add(new SelectItem(manager.getId(), prefix.concat(manager.getFio())));
        }
        return result;
    }

    /**
     * Возвращает интервалы времени блокировки
     *
     * @return
     */
    public List<SelectItem> getTimeIntervals() {
        List<SelectItem> result = new ArrayList<SelectItem>();
        result.add(new SelectItem(0, "3 минуты"));
        result.add(new SelectItem(1, "5 минут"));
        result.add(new SelectItem(2, "10 минут"));
        result.add(new SelectItem(3, "15 минут"));
        result.add(new SelectItem(4, "30 минуты"));
        result.add(new SelectItem(5, "1 час"));
        result.add(new SelectItem(6, "12 часов"));
        result.add(new SelectItem(7, "24 часа"));
        return result;
    }

    public String getManagerForBlock() {
        String result = "";
        if (managerId == -1) {
            result = "всех";
            return result;
        }
        for (User manager : gf().getManagers()) {
            _assert(manager != null);
            if (manager == null) continue;
            if (manager.getId() == managerId) {
                result = "всех, кроме ".concat(manager.getFio());
                break;
            }
        }
        return result;
    }

    public void activateBlock() {
        CountDownTask.setManagerIdBloked(managerId);
        setSec(timeIntervals.getIntervalByKey(intervalId));
    }

    public void deactivateBlock() {
        setSec(0);
    }

    public void setSec(int sec) {
        CountDownTask.setTimerValue(sec);
    }

    public int getSec() {
        return CountDownTask.getTimerValue();
    }

    public boolean isBlocked() {
        if (CountDownTask.getTimerValue() > 0) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Исользуемые интерфалы времени
     */
    private class TimeIntervals {
        private Map<Integer, Integer> intervals = new HashMap<Integer, Integer>();

        public TimeIntervals() {
            intervals.put(0, 180);
            intervals.put(1, 300);
            intervals.put(2, 600);
            intervals.put(3, 900);
            intervals.put(4, 1800);
            intervals.put(5, 3600);
            intervals.put(6, 43200);
            intervals.put(7, 86400);

        }

        public int getIntervalByKey(int key) {
            return intervals.get(key);
        }
    }

    public int getIntervalId() {
        return intervalId;
    }

    public void setIntervalId(int intervalId) {
        this.intervalId = intervalId;
    }

    public long getManagerId() {
        return managerId;
    }

    public void setManagerId(long managerId) {
        this.managerId = managerId;
    }
}

